import java.util.*;


public class Solution2 {
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     * 递增路径的最大长度
     * @param matrix int整型二维数组 描述矩阵的每个数
     * @return int整型
     */
    public int solve (int[][] matrix) {
        // write code here
        int count = 0;
        int n = matrix.length;
        int m = matrix[0].length;
        int[][] dp = new int[n][m];
        for(int i = 0;i<n;i++) {
            for(int j = 0;j<m;j++) {
                count = Math.max(count,bfs(matrix,i,j,n,m,dp));
            }
        }
        return count;
    }
    int[][] dir = {{0,1},{0,-1},{1,0},{-1,0}};
    public int bfs(int[][] matrix,int i,int j,int n,int m,int[][] dp) {
        if(dp[i][j] != 0) {
            return dp[i][j];
        }
        dp[i][j]++;
        for(int k = 0;k<4;k++) {
            int Ni = i + dir[k][0];
            int Nj = j + dir[k][1];
            if(Ni >= 0 && Nj >=0 && Ni < n && Nj < m && matrix[Ni][Nj] > matrix[i][j]) {
                dp[i][j] = Math.max(dp[i][j],1+bfs(matrix,Ni,Nj,n,m,dp));
            }
        }
        return dp[i][j];
    }
}